package demo.kk;

import java.util.concurrent.CompletableFuture;
import java.util.List;
import java.util.stream.Collectors;
import java.util.Arrays;

public class AllOfExample {
    public static void main(String[] args) {
        // 创建多个异步任务
        CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> "Result of Future 1");
        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> "Result of Future 2");
        CompletableFuture<String> future3 = CompletableFuture.supplyAsync(() -> "Result of Future 3");

        List<CompletableFuture<String>> futureList = Arrays.asList(future1, future2, future3);

        // 使用 allOf 等待所有任务完成
        CompletableFuture<Void> allFutures = CompletableFuture.allOf(
                futureList.toArray(new CompletableFuture[0]));

        // 当所有任务完成后，获取它们的结果并合并到一个列表中
        CompletableFuture<List<String>> allPageContentsFuture = allFutures.thenApply(v -> {
            return futureList.stream()
                    .map(CompletableFuture::join) // 使用 join 获取结果，不会抛出检查异常
                    .collect(Collectors.toList());
        });

        // 最终处理合并后的结果
        allPageContentsFuture.thenAccept(contents -> {
            contents.forEach(System.out::println);
        });

        allPageContentsFuture.join(); // 阻塞主线程等待最终结果
    }
}